package com.sicheng.蓝桥.练习题;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/4/7 11:00
 */
public class 分解质因数 {

    // 分解质因数
    public static void main(String[] args) {

        //输入n,输出一个数最小的b让  n*b 是完全平方数
        //例如 ：输入 4 输出 1， 4*1====2^2
        //    输入 15 输出 15  15*15====15^2
        long n = (long) (3 * 3 * 3 * 3) * (5 * 5 * 5 * 5) * (1024 * 1024);
        long res = 1;
        // 拆解质因数
        // n =(a1*2^m1)*(a2*3^m2) *(a3*5^m3) *(a4*7^m4) *(a5* 11^m5) * .....
        // 其中ai*(i+1)^mi 要么整体为1 或者 a1 = 1
        // n= 3^8 * 5^4 * 7^2 * 11^0 * 13^9 * 17^6 * 19^4  输出 13
        // 本质上就是拆成几个数的幂连乘,让幂的次方都成为偶数才是结果
        for (long i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                int s = 0;//记录次方数
                while (n % i == 0) { //继续除 并且记录指数
                    n /= i;
                    s++;
                }
                if ((s & 1) == 1)
                    res *= i;//如果s是奇数次幂,我们就乘上i
            }
        }
        if (n > 1) res *= n;
        System.out.println(res);
    }
}
